import java.util.*;

public class Messung implements i_Messung{
		
	private double mess;
	private Calendar Datum;
	private int Nummer;
	private String Institut_Bez;
	private String Einheit;
	private double oldMess;
	private String oldEinheit;
	private String Messungstyp;
	
	/*
	Messungstypen:
	
	Ozongehalt: ppm oder %"
	Feinstaubgehalt: g/m"
	Stickoxydanteil: g/m"
	Schwefeloxydanteil: g/m"
	Temperatur: C oder F"
	Luftfeuchtigkeit: % oder ppm"
	Luftdruck: hPa oder bar"
	*/
	
	//Formatierung:
	//Feinstaub 450 ppm 21.10.08 23:45:00 WIE 012
	
	//Konstruktor//
	public Messung(String Messungstyp, double mess, String Einheit, Calendar Datum, String Institut_Bez, int Nummer)
	{
		this.Messungstyp = Messungstyp;
		this.Datum = Datum;
		this.Nummer = Nummer;
		this.Institut_Bez = Institut_Bez;
		
		/*Fuer jeden Messungstyp eine vordefinierte Einheit: 
		Einheit ueberpruefen und wenn noetig Wert umrechnen und alten Werte und Einheiten speichern
		*/
		
		if(Messungstyp.equals("Temperatur")) //Alle Temperaturen automatisch in Celsius speichern
		{
			if(Einheit.equals("C")) 
			{
				this.mess = mess;
				this.Einheit = Einheit;
			}else if(Einheit.equals("F"))
			{
				this.oldMess = mess; //Urspruengliche Messung speichern
				this.oldEinheit = Einheit; //Urspruengliche Einheit speichern
				this.Einheit = "C";
				this.mess = (mess - 32) * 5/9; //F nach C konvertieren
			}
		} else if(Messungstyp.equals("Ozongehalt") || Messungstyp.equals("Luftfeuchtigkeit")) //Alle Ozonwerte/luftfeuchtigkeitswerte automatisch in % speichern
		{
			if(Einheit.equals("%")) 
			{
				this.mess = mess;
				this.Einheit = Einheit;
			}else if(Einheit.equals("ppm"))
			{
				this.oldMess = mess; //Urspruengliche Messung speichern
				this.oldEinheit = Einheit; //Urspruengliche Einheit speichern
				this.Einheit = "%";
				this.mess = mess/10000; //ppm nach % konvertieren
			}
		}
		else if(Messungstyp.equals("Luftdruck")) //Alle Luftdruckwerte automatisch in hPa speichern
		{
			if(Einheit.equals("hPa")) 
			{
				this.mess = mess;
				this.Einheit = Einheit;
			}else if(Einheit.equals("bar"))
			{
				this.oldMess = mess; //Urspruengliche Messung speichern
				this.oldEinheit = Einheit; //Urspruengliche Einheit speichern
				this.Einheit = "hPa";
				this.mess = mess*1000; //bar nach hPa konvertieren
			}
		}
		else if(Messungstyp.equals("Feinstaubgehalt") || Messungstyp.equals("Stickoxydanteil") || Messungstyp.equals("Schwefeloxydanteil"))//Alle Luftdruckwerte/Stickoxydanteil/Schwefeloxydanteil automatisch in g/m^3 speichern
		{
			this.Einheit = Einheit;
			this.mess = mess;
			
		} else { System.out.println("Fehler: Messungstyp existert nicht!"); }
		
	}
	
	//GETTERS//
	public double getMess()
	{
		return mess;
	}
	
	public double getMess(String Einheit) //gibt Messung in der uebergebenen Einheit aus
	{	
		if(Einheit.equals(this.oldEinheit))
		{
			return oldMess;//alte Einheit passt
		}
		else if(Einheit.equals("ppm")) 
		{
			return mess*10000;//% in ppm konvertieren
		} 
		else if(Einheit.equals("C"))
		{
			return (((mess*9)/5) + 32); //C in F konvertieren
		}
		else if(Einheit.equals("hPa"))
		{
			return mess/1000; //hPa in Bar konvertieren
		}
		else return mess; //uebergebene Einheit stimmt mit Einheit ueberein
	}
	
	//liefert urspruenglichen Wert zurueck (vor der Umrechnung)
	public double getOldMess()
	{
		return oldMess;
	}

	public String getMessungstyp()
	{
		return Messungstyp;
	}
	
	public String getEinheit()
	{
		return this.Einheit;	
	}
	
	//liefert urspruengliche Einheit des Wert zurueck (vor der Umrechnung)
	public String getOldEinheit()
	{
		return this.oldEinheit;	
	}
	
	public int getNummer()
	{
		return this.Nummer;
	}

	public String getInstitut_Bez()
	{
		return this.Institut_Bez;
	}
	
	public String getDate()
	{
		String date = ""+this.Datum.get(Calendar.DAY_OF_MONTH)+"."+this.Datum.get(Calendar.MONTH)+"."+this.Datum.get(Calendar.YEAR);
		return date + " "+this.Datum.get(Calendar.HOUR)+this.Datum.get(Calendar.MINUTE)+this.Datum.get(Calendar.SECOND);
	}
	
	public int getYear()
	{
		return this.Datum.get(Calendar.YEAR);
	}
	
	public int getMonth()
	{
		return this.Datum.get(Calendar.MONTH);
	}
	
	public int getDay()
	{
		return this.Datum.get(Calendar.DAY_OF_MONTH);
	}
	
	public int getHours()
	{
		return this.Datum.get(Calendar.HOUR);
	}
	
	public int getMinutes()
	{
		return this.Datum.get(Calendar.MINUTE);
	}
	
	public int getSeconds()
	{
		return this.Datum.get(Calendar.SECOND);
	}
	
	public String getall()
	{
		//Formatierung:
		//Feinstaub 450 ppm 21.10.08 23:45:00 WIE 012
		String all = getMessungstyp() + " " + getMess() + " " + getEinheit() + " " + getDay() + "." + getMonth() + "." + getYear() + " " + getHours() + ":" + getMinutes() + ":" + getSeconds() + " " + getInstitut_Bez() + " " + getNummer();
		
	  return all;
	}
}